
<?php

class Contrato_model extends Base_model
{
	const TABLA = "contrato";
	
	var $id;
	var $cliente_fk;
	var $tecnico_tipo_servicio_fk;
	
	function __construct()
	{
		parent::__construct();
	}
	
/** Inserta un registro */
	function insert()
	{
		$this->db->insert(Contrato_model::TABLA, $this->to_array());
		return $this->db->getInsertId();
	}
	
	/** Actualiza el registro */
	function update()
	{
		$this->db->update(Contrato_model::TABLA, $this->to_array());
	}
	
	/** Elimina el registro de la BD */ 
	function delete($id)
	{
		$this->db->where('id', $id);
		$this->db->delete();
	}
	
	/** Retorna el objeto correspondiente con el identificador */
	function get($id)
	{
		$this->db->where('id', $id);
		return $this->db->get(Contrato_model::TABLA);
	}
	
	/**
	 * Retorna todos los contratos de un usuario (tecnico o cliente) en particular.
	 */
	function getContratosPorUsuario($id)
	{
		$this->db->where('cliente_fk', $id);
		return $this->db->get(Contrato_model::TABLA);
	}
	
	
	/** Retorna todos los objetos */
	function getAll()
	{
		return $this->db->get(Contrato_model::TABLA);		
	}
	
	/**
	 * @param $id: usuario
	 * @param $tipo: TECNICO O CLIENTE 
	 * retorna la lista de contratos de un usuario con la informacion
	 * del servicio y el tecnico asociado a dicho contratos.
	 */
	function getContratosInfoPorUsuario($id, $tipo)
	{
		$query = " SELECT c.id, ts.nombre, "; $tipo == TIPO_USUARIO_CLIENTE ? $query .= " ut.email, ut.nombres, " : $query .= " uc.email, uc.nombres, "; 
		$query .= " tts.precio_hora, e.puntuacion, i.archivo " . 
				 " FROM " . Contrato_model::TABLA ." c LEFT JOIN " .
				 			Imagen_model::TABLA . " i ON (c.id = i.id_fk_contrato) LEFT JOIN "; 
							$query .= Evaluacion_model::TABLA . " e ON ( c.id=e.contrato_fk AND e.evaluador_fk = ? ) LEFT JOIN ";		 			
		
				 			$tipo == TIPO_USUARIO_CLIENTE ? $query .= " " : $query .= Usuario_model::TABLA . " uc ON uc.id=c.cliente_fk LEFT JOIN ";
				 			
				 			$query .= Tecnico_tipo_servicio_model::TABLA . " tts ON c.tecnico_tipo_servicio_fk=tts.id LEFT JOIN " . 
				 			Usuario_model::TABLA . " ut ON ut.id = tts.tecnico_fk LEFT JOIN " . 
				 			Tipo_servicio_model::TABLA ." ts ON ts.id = tts.tipo_servicio_fk ";
		$params = array();
		
		//si es un cliente o si es tecnico
		$tipo == TIPO_USUARIO_CLIENTE ? $query .= " WHERE c.cliente_fk = ? " : $query .= " WHERE tts.tecnico_fk = ? ";

		array_push($params, $id);
		array_push($params, $id);

		
		return $this->db->rawQuery($query, $params);
	}
	
	/** Retorna todos los clientes con su insformación del contrato */
	
	function getClienteInfo()
	{
		$query = " select usuario.nombres ".
				 " from ".Contrato_model::TABLA ." contrato left join ". 
				 Usuario_model::TABLA . " usuario on usuario.id = contrato.cliente_fk ";
	
		return $this->db->rawQuery($query);
	}
	
	/** Retorna todos los los servicios del contrato */
	function getServicioInfo()
	{
		$query = " select ts.nombre, tts.precio_hora ".
				 " from ".Contrato_model::TABLA ." contrato left join ". 
				 Tecnico_tipo_servicio_model::TABLA . " tts on tts.tipo_servicio_fk = contrato.tecnico_tipo_servicio_fk left join ".
				 Tipo_servicio_model::TABLA	. " ts on ts.id = tts.tipo_servicio_fk ";
	
		return $this->db->rawQuery($query);
	}
	
}















